package dynamic.importIn;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 * @description Listener 不能被spring管理，要每次读取excel都要new,然后里面用到spring可以构造方法传进去
 */
@Slf4j
@Data
public class EasyExcelListener extends AnalysisEventListener<Map<Integer, String>> {

    /**
     * 表头数据（存储所有的表头数据）
     */
    private List<Map<Integer, String>> headList = new ArrayList<>();

    /**
     * 数据体
     */
    private List<Map<Integer, String>> dataList = new ArrayList<>();


    /**
     * 接收表头数据
     *
     * @param headMap 一行表头, key=列的index(从0开始) value=单元格内容
     * @param context
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        log.info("表头数据: {}", JSONObject.toJSONString(headMap));
        //存储全部表头数据
        headList.add(headMap);
    }

    /**
     * 处理每一行数据
     *
     * @param data    一行数据, key=列的index(从0开始) value=单元格内容
     * @param context
     */
    @Override
    public void invoke(Map<Integer, String> data, AnalysisContext context) {
        log.info("解析到一条数据: {}", JSONObject.toJSONString(data));
        dataList.add(data);
    }

    /**
     * 全部处理结束执行
     *
     * @param context
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        log.info("所有数据解析完成！");
    }

    /**
     * 获取表头列表
     *
     * @return
     */
    public List<Map<Integer, String>> getHeadList() {
        return headList;
    }

    /**
     * 获取表数据列表
     *
     * @return
     */
    public List<Map<Integer, String>> getDataList() {
        return dataList;
    }
}